# write by hasaki
# first edit on 2019/01/01
# last change on 2019/01/13
# 作为一个探索生命的个人的行为准则
import os
import sys
from datetime import datetime

from hashakisea.engine.log.logSystem import SmallSaveCSV
class AsLifer:
    def __init__(self):
        self.now=None                              # 当前时间
        self.save=SmallSaveCSV()                   # 加载保存成csv的模块
        self.file_name=None                        # 保存成csv的csv文件名
        self.path_name=None                        # 保存成csv的文件夹名称
        self.csv_header=[]                         # 保存成csv的header
        self.data=[]                               # 最终保存成csv的行数据,[(1，2，3，。。)]为一条数据
        
        # 个人健康数据
        self.weight=None                           # 当前体重
        self.hight=None                            # 当前身高
        self.mind=None                             # 当前精神状态，比如愉悦，悲伤，愤怒
        self.bedTime=None                          # 上床时间
        self.startSleep=None                       # 开始睡眠的时间，不玩手机，闭上眼睛的那个时间
        self.getUpTime=None                        # 起床时间
        self.exerciseTime=None                     # 锻炼时间
        self.exerciseType=None                     # 锻炼的项目类型

        # 个人精神状态数据类型
        self.happy=None                            # 开心
        self.excited=None                          # 兴奋
        self.delighted=None                        # 愉悦
        self.sad=None                              # 悲伤
        self.blue=None                             # 忧郁
        self.angry=None                            # 愤怒

        # 精神活动
        self.startReadingTime=None                 # 当天开始阅读时间
        self.endReadingTime=None                   # 当天结束阅读的时间
        self.readingPlagform=None                  # 在哪里阅读呢
        self.readingType=None                      # 阅读的是文章还是书，博客微博，演讲？
        self.readingContentType=None               # 阅读的类型，散文，经济，科技，哲学，娱乐

        self.contactFriend=None                    # 联系朋友
        self.friendName=None                       # 朋友的名字
        self.contactFriendFor=None                 # 联系朋友是为何呢
        self.contactFriendTime=None                # 联系朋友的时间点
        self.contactFamily=None                    # 今天是否有与家人有联系呢
        self.contactFamilyName=None                # 今天联系了哪位家人
        self.contactFamilyFor=None                 # 联系家人为何事呢
        self.contactFamilyTime=None                # 什么时候联系家人呢

        self.music=None                            # 今天有没有听音乐阿
        self.musicTime=None                        # 听了多久
        self.musicType=None                        # 啥类型的音乐呢，纯音乐，经典，电音，流行，另类？
        self.musicPlatform=None                    # 在哪里听的音乐

        self.TV=None                               # 今天有没有看视频
        self.TVTime=None                           # 看了多久视频
        self.TVType=None                           # 电视剧类型，爱情，战争，喜剧
        self.TVPlatform=None                       # 在哪里看的视频

        self.game=None                             # 今天有没有玩游戏阿
        self.gameTime=None                         # 玩了多久游戏
        self.gameType=None                         # 玩了啥游戏
        self.gamePlatform=None                     # 在哪里玩的游戏，手机，游戏厅，网吧，steam

        # 饮食
        self.breakfirst=None                       # 早餐
        self.breakfirstTime=None                   # 吃早餐时间
        self.breakfirstType=None                   # 早餐吃了啥
        self.breakfirstMoney=None                  # 早餐吃了多少钱
        self.lunch=None                            # 是否吃了中餐
        self.lunchTime=None                        # 中餐时间
        self.lunchType=None                        # 中餐吃了啥
        self.lunchMoney=None                       # 中餐吃了多少钱
        self.dinner=None                           # 晚餐吃了没
        self.dinnerTime=None                       # 吃晚餐时间
        self.dinnerType=None                       # 晚餐吃了啥
        self.dinnerMoney=None                      # 晚餐吃了多少钱
        self.afterDinner=None                      # 有没吃夜宵阿
        self.afterDinnerTime=None                  # 夜宵时间
        self.afterDinnerType=None                  # 夜宵类型
        self.afterDinnerMoney=None                 # 夜宵花了多少钱

        self.moodNum=None                          # 我把这个唤作情绪指数

    # -----------------------------------------------------------------------------------------------
    # 数据进来部分，因为字段比较多，应该使用读取文件的方式来获取数据，最后返回分析结果,但没有想好怎么做，所以还是先传参数
    def setPhysicsData(self,weight,high,mind,bedTime,startsleep,getUpTime,exerciseTime,exerciseType):
        '''weight当前体重,high当前身高,mind当前精神状态，比如愉悦，悲伤，愤怒
        ,bedTime上床时间,startsleep开始睡眠的时间，不玩手机，闭上眼睛的那个时间,getUpTime起床时间
        ,exerciseTime锻炼时间,exerciseType锻炼的项目类型'''
        self.weight=weight
        self.hight=high
        self.mind=mind
        self.bedTime=bedTime
        self.startSleep=startsleep
        self.getUpTime=getUpTime
        self.exerciseTime=exerciseTime
        self.exerciseType=exerciseType
    
    def setMantalData(self,happy,excited,delighted,sad,blue,angry):
        '''设置精神参数 开心,兴奋,愉悦,悲伤,忧郁,愤怒都是int类型'''
        self.happy=happy                            # 开心
        self.excited=excited                        # 兴奋
        self.delighted=delighted                    # 愉悦
        self.sad=sad                                # 悲伤
        self.blue=blue                              # 忧郁
        self.angry=angry                            # 愤怒
    
    def readData(self,startReadingTime,endReadingTime,readingPlagform,readingType,readingContentType):
        '''阅读活动,当天开始阅读时间,当天结束阅读的时间,在哪里阅读呢,阅读的是文章还是书，博客微博，演讲？
        阅读的类型，散文，经济，科技，哲学，娱乐'''
        self.startReadingTime=startReadingTime            # 当天开始阅读时间
        self.endReadingTime=endReadingTime                # 当天结束阅读的时间
        self.readingPlagform=readingPlagform              # 在哪里阅读呢
        self.readingType=readingType                      # 阅读的是文章还是书，博客微博，演讲？
        self.readingContentType=readingContentType        # 阅读的类型，散文，经济，科技，哲学，娱乐

    def contactData(self,contactFriend,friendName,contactFriendFor,contactFriendTime,
                    contactFamily,contactFamilyName,contactFamilyFor,contactFamilyTime):
        '''联系亲朋好友数据,联系朋友,朋友的名字,联系朋友是为何呢,联系朋友的时间点,今天是否有与家人有联系呢
        今天联系了哪位家人,联系家人为何事呢,什么时候联系家人呢'''
        self.contactFriend=contactFriend                 # 联系朋友
        self.friendName=friendName                       # 朋友的名字
        self.contactFriendFor=contactFriendFor           # 联系朋友是为何呢
        self.contactFriendTime=contactFriendTime         # 联系朋友的时间点
        self.contactFamily=contactFamily                 # 今天是否有与家人有联系呢
        self.contactFamilyName=contactFamilyName         # 今天联系了哪位家人
        self.contactFamilyFor=contactFamilyFor           # 联系家人为何事呢
        self.contactFamilyTime=contactFamilyTime         # 什么时候联系家人呢

    def musicData(self,music,musicTime,musicType,musicPlatform):
        '''听的音乐数据 今天有没有听音乐阿，听了多久，啥类型的音乐呢，纯音乐，经典，电音，流行，另类？，在哪里听的音乐'''
        self.music=music                            # 今天有没有听音乐阿
        self.musicTime=musicTime                    # 听了多久
        self.musicType=musicType                    # 啥类型的音乐呢，纯音乐，经典，电音，流行，另类？
        self.musicPlatform=musicPlatform            # 在哪里听的音乐

    def videoData(self,TV,TVTime,TVType,TVPlatform):
        '''视频数据 今天有没有看视频，看了多久视频，电视剧类型，爱情，战争，喜剧，在哪里看的视频'''
        self.TV=TV                               # 今天有没有看视频
        self.TVTime=TVTime                       # 看了多久视频
        self.TVType=TVType                       # 电视剧类型，爱情，战争，喜剧
        self.TVPlatform=TVPlatform               # 在哪里看的视频

    def gameData(self,game,gameTime,gameType,gamePlatform):
        self.game=game                             # 今天有没有玩游戏阿
        self.gameTime=gameTime                     # 玩了多久游戏
        self.gameType=gameType                     # 玩了啥游戏
        self.gamePlatform=gamePlatform             # 在哪里玩的游戏，手机，游戏厅，网吧，steam
    
    def eatData(self,breakfirst,breakfirstTime,breakfirstType,breakfirstMoney,
        lunch,lunchTime,lunchType,lunchMoney,dinner,dinnerTime,dinnerType,dinnerMoney,
        afterDinner,afterDinnerTime,afterDinnerType,afterDinnerMoney):
        '''饮食数据'''
        self.breakfirst=breakfirst                       # 早餐
        self.breakfirstTime=breakfirstTime               # 吃早餐时间
        self.breakfirstType=breakfirstType               # 早餐吃了啥
        self.breakfirstMoney=breakfirstMoney             # 早餐吃了多少钱
        self.lunch=lunch                                 # 是否吃了中餐
        self.lunchTime=lunchTime                         # 中餐时间
        self.lunchType=lunchType                         # 中餐吃了啥
        self.lunchMoney=lunchMoney                       # 中餐吃了多少钱
        self.dinner=dinner                               # 晚餐吃了没
        self.dinnerTime=dinnerTime                       # 吃晚餐时间
        self.dinnerType=dinnerType                       # 晚餐吃了啥
        self.dinnerMoney=dinnerMoney                     # 晚餐吃了多少钱
        self.afterDinner=afterDinner                     # 有没吃夜宵阿
        self.afterDinnerTime=afterDinnerTime             # 夜宵时间
        self.afterDinnerType=afterDinnerType             # 夜宵类型
        self.afterDinnerMoney=afterDinnerMoney           # 夜宵花了多少钱

    # -------------------------------------------------------------------------------------------
    # 数据分析处理部分
    def calculateTheMood(self):
        '''计算情绪指数'''
        good_mood_temp=self.happy+self.excited*1.5+self.delighted*1.3
        bad_mood_temp=self.sad*1.7+self.blue+self.angry*2
        self.moodNum=round(good_mood_temp/bad_mood_temp,2)

    # -------------------------------------------------------------------------------------------
    # 设置部分
    def setSavePath(self):
        '''设置路径'''
        self.path_name='人生数据'
        self.file_name='个人生活数据.csv'
        
    def setHeader(self):
        '''设置保存csv的文件列头'''
        self.csv_header.append('time')                   # 1
        self.csv_header.append('weight')                 # 2
        self.csv_header.append('high')                   # 3
        self.csv_header.append('mind')                   # 4
        self.csv_header.append('bedTime')                # 5
        self.csv_header.append('startSleep')             # 6
        self.csv_header.append('getUpTime')              # 7
        self.csv_header.append('exerciseTime')           # 8
        self.csv_header.append('exerciseType')           # 9
        self.csv_header.append('moodNum')
        self.csv_header.append('startReadingTime')       # 10
        self.csv_header.append('endReadingTime')         # 11
        self.csv_header.append('readingPlagform')        # 12
        self.csv_header.append('readingType')            # 13
        self.csv_header.append('readingContentType')     # 14
        self.csv_header.append('contactFriend')          # 15
        self.csv_header.append('friendName')
        self.csv_header.append('contactFriendFor')
        self.csv_header.append('contactFriendTime')
        self.csv_header.append('contactFamily')
        self.csv_header.append('contactFamilyName')
        self.csv_header.append('contactFamilyFor')
        self.csv_header.append('contactFamilyTime')
        self.csv_header.append('music')
        self.csv_header.append('musicTime')
        self.csv_header.append('musicType')
        self.csv_header.append('musicPlatform')
        self.csv_header.append('TV')
        self.csv_header.append('TVTime')
        self.csv_header.append('TVType')
        self.csv_header.append('TVPlatform')
        self.csv_header.append('game')
        self.csv_header.append('gameTime')
        self.csv_header.append('gameType')
        self.csv_header.append('gamePlatform')            # 34
        self.csv_header.append('breakfirst')
        self.csv_header.append('breakfirstTime')
        self.csv_header.append('breakfirstType')
        self.csv_header.append('breakfirstMoney')
        self.csv_header.append('lunch')
        self.csv_header.append('lunchTime')
        self.csv_header.append('lunchType')
        self.csv_header.append('lunchMoney')
        self.csv_header.append('dinner')
        self.csv_header.append('dinnerTime')
        self.csv_header.append('dinnerType')
        self.csv_header.append('dinnerMoney')
        self.csv_header.append('afterDinner')
        self.csv_header.append('afterDinnerTime')
        self.csv_header.append('afterDinnerType')
        self.csv_header.append('afterDinnerMoney')

    def setData(self):
        '''生成一条个人数据'''
        self.data.clear()
        self.now=datetime.now()
        data_temp=[self.now,self.weight,self.hight,self.mind,self.bedTime,self.startSleep,
        self.getUpTime,self.exerciseTime,self.exerciseType,self.moodNum]
        if self.startReadingTime:
            data_temp.append(self.startReadingTime)
            data_temp.append(self.endReadingTime)
            data_temp.append(self.readingPlagform)
            data_temp.append(self.readingType)
            data_temp.append(self.readingContentType)
        else:
            for i in range(5):
                data_temp.append(-1)
        
        if self.contactFriend:
            data_temp.append(self.contactFriend)
            data_temp.append(self.friendName)
            data_temp.append(self.contactFriendFor)
            data_temp.append(self.contactFriendTime)
            data_temp.append(self.contactFamily)
            data_temp.append(self.contactFamilyName)
            data_temp.append(self.contactFamilyFor)
            data_temp.append(self.contactFamilyTime)
        else:
            for j in range(8):
                data_temp.append(-1)
        
        if self.music:
            data_temp.append(self.music)
            data_temp.append(self.musicTime)
            data_temp.append(self.musicType)
            data_temp.append(self.musicPlatform)
        else:
            for k in range(4):
                data_temp.append(-1)

        if self.TV:
            data_temp.append(self.TV)
            data_temp.append(self.TVTime)
            data_temp.append(self.TVType)
            data_temp.append(self.gamePlatform)
        else:
            for l in range(4):
                data_temp.append(-1)
        
        if self.game:
            data_temp.append(self.game)
            data_temp.append(self.gameTime)
            data_temp.append(self.gameType)
            data_temp.append(self.gamePlatform)
        else:
            for n in range(4):
                data_temp.append(-1)
        
        if self.breakfirst or self.lunch or self.dinner or self.afterDinner:
            data_temp.append(self.breakfirst)
            data_temp.append(self.breakfirstTime)
            data_temp.append(self.breakfirstType)
            data_temp.append(self.breakfirstMoney)
            data_temp.append(self.lunch)
            data_temp.append(self.lunchTime)
            data_temp.append(self.lunchType)
            data_temp.append(self.lunchMoney)
            data_temp.append(self.dinner)
            data_temp.append(self.dinnerTime)
            data_temp.append(self.dinnerType)
            data_temp.append(self.dinnerMoney)
            data_temp.append(self.afterDinner)
            data_temp.append(self.afterDinnerTime)
            data_temp.append(self.afterDinnerType)
            data_temp.append(self.afterDinnerMoney)
        else:
            for m in range(16):
                data_temp.append(-1)
        
        self.data=[(data for data in data_temp)]

    # -------------------------------------------------------------------------------------------
    # 数据保存部分
    def saveAsCSV(self):
        '''保存成csv'''
        self.calculateTheMood()
        self.setSavePath()
        self.setHeader()
        self.setData()
        self.save.setting(self.path_name,self.file_name,self.csv_header,self.data)
        self.save.save()